package org.apache.ibatis.session;

import java.io.Closeable;
import java.sql.Connection;

/**
 * mybatis核心接口，主要封装了数据库的一些常用操作，由SqlSessionFactory接口负责创建
 * @author xieqiaofu
 * Create time: 2019/10/09
 **/
public interface SqlSession extends Closeable {

    /**
     * 根据参数查询一行数据
     * @param statement
     * @param parameter
     * @param <T>
     * @return
     */
    <T> T selectOne(String statement, Object parameter);

    /**
     * 刷新statement集，并提交数据库连接
     */
    void commit();

    /**
     * 回滚
     */
    void rollback();

    /**
     * 关闭session
     */
    @Override
    void close();

    /**
     * 获取mybatis全局配置
     * @return
     */
    Configuration getConfiguration();

    /**
     * 根据class获取mapper接口类
     * @param type
     * @param <T>
     * @return
     */
    <T> T getMapper(Class<T> type);

    /**
     * 获取数据库连接
     * @return
     */
    Connection getConnection();
}
